﻿/***********************************************************************
 * CLR 版本: 4.0.30319.225
 * 工程名称: $projectname$
 * 命名空间: Toulr.Core.Services
 * 文件名称: CommonService
 * 描    述: 提供网站公共服务接口实现
 * 作    者: 18901309129@189.cn
 * 登录用户: hyyu
 * 创建时间: 2011-5-28 16:54:11
 * 创建年份: 2011
 * Update History: 
 ***********************************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using Toulr.Domains;
using Toulr.Domains.System;
using Toulr.Models;
using Toulr.Services;
using Toulr.Util.Logging;

namespace Toulr.Core.Services
{
    /// <summary>
    /// 提供网站公共服务接口实现
    /// </summary>
    public class CommonService : ICommonService
    {
        #region 分类信息、分类扩展信息

        /// <summary>
        /// 获取一级分类信息列表
        /// </summary>
        /// <returns></returns>
        /// hyyu 20110528
        public ActionResult<IList<InfoCategories>> GetInfoCategoriesRoot()
        {
            var lstInfoCategories = QueryInfoCategoriess(-1, 0, null, true);
            if (lstInfoCategories == null)
                return new ActionResult<IList<InfoCategories>>(1, "获取分类信息列表失败，详细请查看错误日志。", null);
            if (lstInfoCategories.Count == 0)
                return new ActionResult<IList<InfoCategories>>(1, "没有符合条件的记录", lstInfoCategories);
            return new ActionResult<IList<InfoCategories>>(0, "获取分类信息列表成功", lstInfoCategories);
        }

        /// <summary>
        /// 获取某一类别的全部子分类信息列表
        /// </summary>
        /// <param name="id">分类ID</param>
        /// <returns></returns>
        /// hyyu 20110528
        public ActionResult<IList<InfoCategories>> GetInfoCategoriesByPid(int id)
        {
            var lstInfoCategories = QueryInfoCategoriess(-1, id, null, true);
            if(lstInfoCategories==null)
                return new ActionResult<IList<InfoCategories>>(1, "获取分类信息列表失败，详细请查看错误日志。", null);
            if(lstInfoCategories.Count==0)
                return new ActionResult<IList<InfoCategories>>(1,"没有符合条件的记录，分类ID："+id,lstInfoCategories);
            return new ActionResult<IList<InfoCategories>>(0, "获取分类信息列表成功", lstInfoCategories);
        }

        //todo 现在作为一个公开的接口，可以考虑再抽一层出来
        public static IList<InfoCategories> QueryInfoCategoriess(int id,int parentId,string categoryName,bool enabled)
        {
            try
            {
                var objs = from infoCategoriese in DomainContext.Instance.InfoCategorieses
                           where infoCategoriese.Enabled == enabled
                           select infoCategoriese;
                if (id > 0)
                    objs = objs.Where(infoCategoriese => infoCategoriese.Id == id);
                if (parentId > -1)
                    objs = objs.Where(infoCategoriese => infoCategoriese.ParentId == parentId);
                if (!string.IsNullOrEmpty(categoryName))
                    objs = objs.Where(infoCategoriese => infoCategoriese.CategoryName.Contains(categoryName));
                objs = objs.OrderBy(infoCategoriese => infoCategoriese.Id);
                return objs.ToArray();
            }
            catch (Exception ex)
            {
                LogHelper.Logger.Error("获取分类信息列表出错："+ex.Message,ex);
                return null;
            }
        }

        #endregion
    }
}
